package pms.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;

/**
 * <p>
 * Ein Controller, der ueberprueft, ob Urlaub genommen werden kann oder nicht.
 * Hier kann man dann die Abwesenheit bestaetigen oder loeschen.
 * </p>
 * <p>
 * ModelAndView Infos
 * <ul>
 * <li>title: Ueberschrift dieser View</li>
 * <li>message: Hinweise fuer den Benutzer</li>
 * </ul>
 * Falls es zu Fehlern kommt, wird die view 'Fehler.jsp' aufgerufen
 * </p>
 */

public class BestaetigeAbwesenheit extends AlleAbwesenheitendesMitarbeiters2
{
	protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest,
			HttpServletResponse httpServletResponse) throws Exception {
			// idm Primärschlüssel des Mitarbeiters
			int idm = Integer.parseInt(httpServletRequest.getParameter("idm"));
		    // idva Primärschlüssel der Abwesenheit aus Mitarbeiter abwesend
			int ida = Integer.parseInt(httpServletRequest.getParameter("ida"));
			
			ModelAndView mv = new ModelAndView();
			
		    // zunächst nicht genehmigt
		    boolean genehmigtpruefung1 = false;
		    boolean genehmigtpruefung2 = false;
		    
		    try {
		    	// erst pruefung: Ist noch genügend freier Urlaub in diesem Jahr;
				int imjahr = getMitarbeiterAbwesendDao().fuerWelchesJahr(ida);
				int tagebenoetigt =  getMitarbeiterAbwesendDao().fuerGenehmigungAnzahlTage(ida, getJahrDao().findeallefeiertagediezugeordnetmitjahreszahl(imjahr), getJahrDao().findeallesperrtagediezugeordnetmitjahreszahl(imjahr));
				int bereitsgenehmigt = getMitarbeiterAbwesendDao().bereitsGenehmigungAnzahlTage(ida, getJahrDao().findeallefeiertagediezugeordnetmitjahreszahl(imjahr), getJahrDao().findeallesperrtagediezugeordnetmitjahreszahl(imjahr));
				int urlaubstageimjahr = getMitarbeiterDao().findeUrlaubstagedesMitarbeitersimJahr(idm, imjahr);
				if ((tagebenoetigt + bereitsgenehmigt) <= urlaubstageimjahr) {
					genehmigtpruefung1 = true;
				} else {
					genehmigtpruefung1 = false;
				}
				
				// zweite pruefung: gibt es abhängigkeiten mit Leuten in den Abteilungen
				// in denen sich der Mitarbeiter befindet ob schon die maximale Anzahl von
				// Mitarbeitern die gleichzeitig fehlen zur beantragten Abwesenheit einen Konflikt hervorrufen ?
		    	genehmigtpruefung2 = getMitarbeiterAbwesendDao().pruefeobAbhaengigkeitzuanderenAbteilungen(idm, ida);
				
		    	// beide Prüfungen ok dann Status aendern
				if ((genehmigtpruefung1 && genehmigtpruefung2)) {
					getMitarbeiterAbwesendDao().aendereStatusderAbwesenheit(ida);
				}
					
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				mv.addObject("title", "Bestätige Abwesenheit");
				mv.addObject("message", "Hier ist wohl unerwartet was schief gelaufen. Bitte fragen Sie den Programmierer(in) dieser Anwendung warum?");
				mv.setViewName("Fehler"); 
				return mv;
			} 
		    		    
			return super.handleRequestInternal(httpServletRequest, httpServletResponse);
	}
}

